package com.csw.scala

object Demo23implicit {
  def main(args: Array[String]): Unit = {

    /**
      * 显示转换(类型的转换)
      */
    //    val s: String = "1000"
    //    val s1: Int = s.toInt
    //    println(s1)

    /**
      * 隐式转换
      * 1、隐式转换方法
      * 2、隐式转换变量
      * 3、隐式转换类
      */


    /**
      *
      * 1、隐式转换方法
      *
      * 隐式转换方法和方法名无关
      * 和参数类型以及返回值有关，同一个作用域中只能存在一个参数类型和返回值相同的隐式转换
      *
      */

    implicit def stringToInt(s: String): Int = {
      println("隐式方法被调用了")
      Integer.parseInt(s)
    }

    def fun(x: Int): Any = {
      println(x + 100)
    }

    fun(100)

    //显示类型转换
    fun(Integer.parseInt("100"))

    //自动调用隐式转换方法，实现类型的转换
    fun("100")

    //相当于
    fun(stringToInt("200"))

    //不会做隐式转换，和自己的方法有冲突时使用自己的方法
    println("100" + 100) //100100


    implicit def intToString(a: Int): String = {
      println("隐式方法intToString被调用了")
      a.toString
    }

    val x = 100
    val split: Array[String] = x.split("\t")
    println(split(0))
  }
}
